#ifndef _GPIO_KEY_H_
#define _GPIO_KEY_H_

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <sys/select.h>
#include "list.h"

typedef enum {
    PULL_DOWN, 
    PULL_UP,
    PULL_NONE
} pull_t;

typedef struct {
    list_item_t item ;

    uint16_t pin ;
    int code ;
    pull_t pull ;

    int fd ;
    unsigned int val ;

} gpiokey_t ;

gpiokey_t * gpiokey_list() ;

bool gpiokey_add(list_t * list, uint16_t pin, int code, pull_t pull) ;
void gpiokey_remove(list_t * list, uint16_t pin) ;
void gpiokey_clear(list_t * list) ;

int gpiokey_poll_fdset(list_t * list, fd_set * fdset) ;
void gpiokey_loop(list_t * list) ;


#endif // _GPIO_KEY_H_